C 文件读取 您所在的位置:网站首页 c 文件读取 C 文件读取

C 文件读取

2023-03-25 08:18| 来源: 网络整理| 查看: 265

二进制读取 #include int main() { FILE *fpRead = fopen("data/data.in","rb"); FILE *fpWrite = fopen("data/data.o","wb"); unsigned char buf[1000]; int rc; while((rc = fread(buf,sizeof(unsigned char), 1, fpRead))!=0) { // 1. 一次读写一个字节,也可以一次读写n个字节,但rc总小于等于n,表示实际读取的字节数 // 2. fread 函数遇到'\0'后会停止读入,返回rc,并buf余下的位置会补0,因此不用担心会报错的情况 // 3. 在写入的时候也要给出写入多少个(rc),每一个数据有多少位(sizeof(typ) fwrite( buf, sizeof(unsigned char), rc, fpWrite ); for(int i = 0; i < rc; i++) { printf("%x, ",buf[i]); } } printf("\n"); fclose(fpRead); fclose(fpWrite); return 0; }

image data.in文件:按照一个字节一个字节输出(以十六进制的形式,读入时候读的是ASCII码) image

fopen() 函数参数

FILE *fp = fopen("D:\\1.txt","rb+"); // 以二进制的形式打开文件1.txt, 如果文件不存在则返回NULL。文件以读写方式打开,可以用fp指针修改或者读取。

r 只读方式 w 只写方式, 如果文件不存在则新建一个文件,如果文件存在,则清空文件重写 r+ 可读可写,如果文件不存在则返回NULL w+ 可读可写,如果文件不存在则新建文件 a 追加方式,如果文件不存在则新建文件,如果文件存在则在末尾追加写入的数据 a+ 可读可写,写入的数据追加至末尾,如果文件不存在则新建文件 后面默认为t,以文件格式读写; 如果加上b,则以二进制文件读写(最小单位为字节,unsigned char) fread() 函数参数

size_t fread(void *buf, size_t size, size_t num, FILE *stream)

buf 指向带有最小尺寸 size*nmemb 字节的内存块的指针, 用来存读入的数据 size 每个元素大小,以字节为单位 num 一次读取的元素个数 stream 指向FILE对象的指针,由fopen函数生成 rc = fread(buf,sizeof(unsigned char), 10, fpRead)) buf一次存入10个字节的数据,也可能由于文件缺失,只读了一部分,rc记录读入的元素个数,如果rc==0,说明读入完成。 fscanf() 函数参数

int fscanf(FILE * stream, const char * format, [argument...])

stream 指向FILE对象的指针,输入流(跟cin类似,指键盘上输入)fin则从文件输入,由fopen创建。 format 一次读入文件的格式,例如"%s %s %s %d" [argument...] 读取的数据保存的位置, s0,s1,s2,&num 返回读入参数的个数,读取失败则返回EOF(-1) 按结构体读取文件 #include typedef struct Student{ int age; char name[10]; int gender; }Stu; int main() { FILE *fpRead = fopen("data/data.in","r");//将data.in文件存在data文件夹下 FILE *fpWrite = fopen("data/data.o","w"); Stu buf[1000]; //定义缓存区 int j = 0; while((fscanf(fpRead,"%d,%d,%s",&buf[j].age,&buf[j].gender,buf[j].name))!=EOF) //结构化数据输入 { printf("age:%d name:%s gender:%s\n",buf[j].age,buf[j].name,buf[j].gender?"男":"女"); fprintf(fpWrite,"age:%d name:%s gender:%s\n",buf[j].age,buf[j].name,buf[j].gender?"男":"女"); //结构化数据输出 j++; } printf("\n"); fclose(fpRead); fclose(fpWrite); return 0; }

读取的文件

12,1,Tom 14,0,Sara 12,1,Jack 18,0,Kate

输出: image

其他输入输出函数(C语言) fgetc fputc int __cdecl fgetc(FILE *_File); //成功则返回获得的值,不成功则返回EOF int __cdecl fputc(int _Ch,FILE *_File); //成功则返回_ch, 不成功则返回EOF=-1 fgets fputs int __cdecl fputs(const char * __restrict__ _Str,FILE * __restrict__ _File); //若成功返回非负值,若失败返回EOF char *__cdecl fgets(char * __restrict__ _Buf,int _MaxCount,FILE * __restrict__ _File); 如果成功返回一个指针;若出错返回null,需要定义_MaxCount一次最多获得多少个字节

输入输出重定向,也可以解决大部分问题

实例:代码如下: 将in.txt中的输入两两相乘然后输出到out.txt文件中

c写法: #include int main() { int a, b; freopen("in.txt", "r", stdin); //输入重定向,输入数据将从in.txt文件中读取 freopen("out.txt", "w", stdout); //输出重定向,输出数据将保存在out.txt文件中 while (scanf("%d %d",&a,&b)!=EOF) { printf("%d ",a*b); } fclose(stdin); //关闭文件 fclose(stdout); //关闭文件 return 0; }

也可以简单写如下代码: test.c文件:

#include int main() { int a, b; while (scanf("%d %d",&a,&b)!=EOF) { printf("%d ",a*b); } return 0; }

在命令行输入 g++ -o test test.c test.exe out.txt 在命令行指定输入输出文件也可以实现上面的功能

C++写法 #include using namespace std; int main() { int a, b; ifstream inFile("in.txt"); ofstream outFile("out.txt"); while (inFile >> a >> b) { outFile


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有